part of "../dio.dart";

/// 根据默认的配置设置一个基础信息已经配置好的dio
/// - 配置了默认超时时间，并且配置了常见错误的拦截器
/// - 用户完全可以自行传入自己的设定
Dio createDefaultDio({
  BaseOptions? options,
  Iterable<Interceptor>? interceptors,
}) {
  // 如果部分配置未传入，则使用默认值
  // 连接后的数据发送给更高的容错率，因为可能数据会有点大
  options ??= BaseOptions();
  options.connectTimeout ??= const Duration(seconds: 5);
  options.sendTimeout ??= const Duration(seconds: 10);
  options.receiveTimeout ??= const Duration(seconds: 10);
  options.contentType ??= 'application/json';

  final dio = Dio(options);

  // 加入基础的拦截器
  dio.interceptors.add(_interceptorTimeout);
  dio.interceptors.add(_interceptorServerRefuse);
  dio.interceptors.add(_interceptorSocket);

  // 如果用户传入了自己的拦截器，则一起加入
  if (interceptors != null) {
    for (final interceptor in interceptors) {
      dio.interceptors.add(interceptor);
    }
  }

  // 返回配置好的dio
  return dio;
}
